(function($) {
    $.fn.spinner = function(params) {
        var defaults = {
            max: 9999999999999999999999,
            min: 0,
            val: 0,
            scale: 3,
            change: function() {},
            disabled: false,
            width: 144
        };   
        //        alert('ok')
        var opts = $.extend(defaults, params); 
        var spinner = $('<div style="width:'+opts.width+'px" class="ui-spinner"></div>');
        var input =$('<input style="width:'+opts.width+'px" class="mws-textinput ui-spinner-box" type="text" value="'+opts.val+'">');
        if(opts.disabled)
            input.attr('disabled', 'disabled');
        spinner.append(input);
        var plus=$('<button  class="ui-spinner-up" type="button"></button>');
        var moins=$('<button class="ui-spinner-down" type="button"></button>');
        spinner.append(plus);
        spinner.append(moins);
        if(opts.aaa == 1){
            alert($(this).html())
            alert(spinner.html())
        }
        if($(this).parent().attr('class') == 'divSpinner')
            $(this).parent().replaceWith(spinner);
        else{
            
            $(this).replaceWith(spinner);
        }
        input.attr('id',$(this).attr('id'));
        input.attr('name',$(this).attr('name'));
        plus.click(function(){
            if(input.attr('disabled')== 'disabled')
                return flase;
            var somme;
            if(opts.scale>0)
                
                somme= (parseFloat(input.val())+1).toFixed(opts.scale);
            else
                somme = (parseInt(input.val())+1);
            if(somme < opts.max){
                input.val(somme);
                init=somme;
                opts.change();
            }
            else {
                input.val(opts.max);
                $('#'+input.attr('id')).val(opts.max);
                init =opts.max;
                opts.change();
            }
        })
        moins.click(function(){
            if(input.attr('disabled')== 'disabled')
                return flase;
            var somme;
            if(opts.scale>0)
                somme = (parseFloat(input.val())-1).toFixed(opts.scale);
            else
                somme = (parseInt(input.val())-1);
            if(somme > opts.min){
                input.val(somme);
                input.val(somme);
                init = opts.max;
                opts.change();
            }
                
            else{
                init= opts.min;
                input.val(opts.min);
                opts.change();
            }
        })
        input.change(function(){
            opts.change();
        })
        input.focus(
            function() {},
            function() {
                opts.change();
            }
            );
        input.keypress(function(e)
        {
            var key;
            var keychar;
            if (window.event)
                key = window.event.keyCode;
            else if (e)
                key = e.which;
            else
                return true;
            keychar = String.fromCharCode(key);
            // control keys
            if ((key==null) || (key==0) || (key==8) ||
                (key==9) || (key==13) || (key==27) )
                return true;
            // numbers
            else if ((("0123456789").indexOf(keychar) > -1))
                return true;
            // decimal point jump
            else if (keychar == ".")
            {
                if(input.val().indexOf(keychar) > 0)
                    return false;
            }
            else
                return false;
        }) 
        
        return this;  
    };
})(jQuery);